﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using Helper;
using System.ComponentModel;
namespace CoreData
{
    public class Voucher
    {
            public long ID{get;set;}
         [Description("Mã phiếu")]
            public string ReceiptNo{get;set;}
         [Description("Ngày lập phiếu")]
            public DateTime CreateDate{get;set;}
         [Description("Ngày sửa phiếu lần cuối")]
            public DateTime ModifieDate{get;set;}
            public long CreateBy{get;set;}
            public long ModifieBy{get;set;}
            public int MoneyType { get; set; }
         [Description("Số chứng từ")]
            public string BillNo{get;set;}
            public long PaymentMethod{get;set;}
            public long ReceiptReason{get;set;}
       
         [Description("Ghi chú")]
            public string Description{get;set;}
            public bool IsDeleted{get;set;}
            public int Type { get; set; } //0 la phieu thu, 1 là phiếu chi
            public int Excuter { get; set; }// để phân loại xemai lập: 0 là kế toán, 1 là thủ quỹ, 2 là cả 2
          [Description("Phương thức thanh toán")]
            public string PaymentExt { get; set; }
          [Description("Lý do")]
          public string ReasonExt { get; set; }
        /// <summary>
        /// Nhân viên thu
        /// </summary>
          [Description("Người lập phiếu thu")]
            public string StaffExt { get; set; }
          /// <summary>
          /// Nhân viên chinh sua phieu
          /// </summary>
          [Description("Người sửa phiếu lần cuối")]
          public string StaffEndExt { get; set; }
          [Description("Học viên")]
          public string StudentNameExt { get; set; }
          [Description("Lớp")]
          public string ClassNameExt { get; set; }
      
        public Voucher()
        {       
                            ReceiptNo ="";   
                            BillNo ="";   
                            Description ="";
                            CreateDate = DateTime.Now;
                            ModifieDate = DateTime.Now;
        }
        
       static Voucher DynamicCast<T>(object row_data, object row_header) where T : Voucher
       {
           // row_data : DataRow
           // row_header : DataColumnCollection
           Voucher ret = new Voucher();
           DataRow dt = (DataRow)row_data;

           foreach (DataColumn column in (DataColumnCollection)row_header)
           {
               switch (column.ColumnName)
               {
                      case  "ID":
                        ret.ID = ConvertObject.ToLong(dt[column]);
                       break;
                      case  "ReceiptNo":
                        ret.ReceiptNo = ConvertObject.ToString(dt[column]);
                       break;
                      case  "CreateDate":
                        ret.CreateDate = ConvertObject.ToDateTime(dt[column]);
                       break;
                      case  "ModifieDate":
                        ret.ModifieDate = ConvertObject.ToDateTime(dt[column]);
                       break;
                      case  "CreateBy":
                        ret.CreateBy = ConvertObject.ToLong(dt[column]);
                       break;
                      case  "ModifieBy":
                        ret.ModifieBy = ConvertObject.ToLong(dt[column]);
                       break;
                      case  "BillNo":
                        ret.BillNo = ConvertObject.ToString(dt[column]);
                       break;
                      case  "PaymentMethod":
                        ret.PaymentMethod = ConvertObject.ToLong(dt[column]);
                       break;
                      case  "ReceiptReason":
                        ret.ReceiptReason = ConvertObject.ToLong(dt[column]);
                       break;
                      
                      case  "Description":
                        ret.Description = ConvertObject.ToString(dt[column]);
                       break;
                      case  "IsDeleted":
                        ret.IsDeleted = ConvertObject.ToBool(dt[column]);
                       break;
                   case "StaffName":
                       ret.StaffExt = ConvertObject.ToString(dt[column]);
                       break;
                   case "StaffModifieName":
                       ret.StaffEndExt = ConvertObject.ToString(dt[column]);
                       break;

                   case "PaymentName":
                       ret.PaymentExt = ConvertObject.ToString(dt[column]);
                       break;
                   case "PaymentReasonName":
                       ret.ReasonExt = ConvertObject.ToString(dt[column]);
                       break;
                   case "Type":
                       ret.Type = ConvertObject.ToInt(dt[column]);
                       break;
                   case "MoneyType":
                       ret.MoneyType = ConvertObject.ToInt(dt[column]);
                       break;
                   case "Excuter":
                       ret.Excuter = ConvertObject.ToInt(dt[column]);
                       break;
                   case "StudentName":
                       ret.StudentNameExt = ConvertObject.ToString(dt[column]);
                       break;
                   case "ClassName":
                       ret.ClassNameExt = ConvertObject.ToString(dt[column]);
                       break;
                   case "TempStudentName":
                       var tempStudent = ConvertObject.ToString(dt[column]);
                       if (!String.IsNullOrEmpty(tempStudent))
                           ret.StudentNameExt = tempStudent;
                       break;
                   default:
                       break;
               }
           }

           return ret;
       }
        
    }
}
